package com.dfz.aliyun.design.pattern.c15.proxy;

/**
 * 代理模式
 * <pre>
 * 意图：为其他对象提供一种代理以控制对这个对象的访问
 * 主要解决：在直接访问对象时带来的问题，比如说：要访问的对象在远程的机器上。在面向对象系统中，
 *         有些对象由于某些原因（比如对象创建开销很大，或者某些操作需要安全控制，或者需要进程外的访问），
 *         直接访问会给使用者或者系统结构带来很多麻烦，我们可以在访问此对象时加上一个对此对象的访问层。
 * 如何使用：想在访问一个类时做一些控制。
 * 如何解决：增加中间层。
 * 关键代码：实现与被代理类组合。
 * 优点：1、职责清晰。 2、高扩展性。 3、智能化。
 * 缺点：1、由于在客户端和真实主题之间增加了代理对象，因此有些类型的代理模式可能会造成请求的处理速度变慢。
 *      2、实现代理模式需要额外的工作，有些代理模式的实现非常复杂。
 * </pre>
 */
public class ProxyDemo {

    public static void main(String[] args) {
        Image image = new ProxyImage("test.jpg");

        // 第一次从磁盘加载，并缓存
        image.display();

        // 第二次从缓存读取
        image.display();
    }
}
